package entity

type Option struct {
	OptionKey   string `json:"key"`
	OptionValue string `json:"value"`
}

type DownloadListItem struct {
	IsDir     string `json:"isDir"` // TODO: "true" or "false"
	OssPath   string `json:"ossPath"`
	LocalPath string `json:"localPath"`
}

type UploadListItem struct {
	OssPath   string `json:"ossPath"`
	LocalPath string `json:"localPath"`
}

type SolverTask struct {
	ID   int    `json:"id"`   // 任务id
	Name string `json:"name"` // 任务名字

	// 求解任务配置
	DownloadList []DownloadListItem `json:"downloadList"` // 文件同步类信息
	UploadList   []UploadListItem   `json:"uploadList"`   // 文件同步类信息
	Options      []Option           `json:"options"`      // cmd 后面的选项参数
	Envs         []Env              `json:"envs"`
	ResourceCPU  uint               `json:"resourceCPU"`
	ResourceMEM  uint               `json:"resourceMEM"`

	// others
	Namespace string `json:"namespace"`
	Status    string `json:"status"`
	LogMsg    string `json:"logmsg"`

	// 原生求解器定义
	SolverSpec SolverSpec `json:"solverSpec"`
}

type FileParam struct {
	Name string `json:"name"` // 文件参数名字
	Path string `json:"path"`
	Type string `json:"type"` // download or upload
}

type CmdParam struct {
	FileParamName string `json:"fileParamName"` // 对应 FileParam 的 name(文件参数名字)，映射关系
	NameCN        string `json:"nameCN"`        // 中文描述
	Param         string `json:"param"`         // -i or -w ...
	Require       bool   `json:"require"`
	Type          string `json:"type"` // file or common, file 代表是文件io类参数，common 代表是普通类参数
}

type Env struct {
	Name  string `json:"name"`
	Value string `json:"value"`
}

// 原生求解器定义
type SolverSpec struct {
	Id                int         `json:"id"`
	Name              string      `json:"name"`
	NameEn            string      `json:"nameEn"`
	Description       string      `json:"description"`
	ProductSourceId   int         `json:"productSourceId"`
	ProductSourceName string      `json:"productSourceName"`
	Product           string      `json:"product"`
	Image             string      `json:"image"` // 制品，也就是镜像信息
	CPULimit          int         `json:"cpuLimit"`
	MemoryLimit       int         `json:"memoryLimit"`
	Cmd               string      `json:"cmd"`
	EnvList           []Env       `json:"envList"`
	FileParamList     []FileParam `json:"fileParamList"`
	CmdParamList      []CmdParam  `json:"cmdParamList"`
}

const (
	TaskStatusQueuing    = "queuing"    // 排队中
	TaskStatusRunning    = "running"    // 运行中
	TaskStatusSuccess    = "success"    // 已完成
	TaskStatusFailed     = "failed"     // 失败
	TaskStatusTerminated = "terminated" // 已终止
)
